//package org.example.demo1startjava17.download.hDemo;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.collection.CollectionUtil;
//import cn.hutool.core.collection.ListUtil;
//import cn.hutool.core.io.IoUtil;
//import cn.hutool.core.lang.Dict;
//import cn.hutool.core.util.NumberUtil;
//import cn.hutool.core.util.StrUtil;
//import cn.hutool.core.util.URLUtil;
//
//
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
//import com.haier.hgwms.common.config.lbl.ApiException;
//import com.haier.hgwms.common.config.lbl.ProjectUtil;
//import com.haier.hgwms.common.config.lbl.db.DsHolder;
//import com.haier.hgwms.common.config.lbl.dto.IdDto;
//import com.haier.hgwms.common.config.lbl.enums.DjGzStatusEnum;
//import com.haier.hgwms.common.config.lbl.enums.InOrderSourceSysEnum;
//import com.haier.hgwms.common.config.lbl.enums.KcfpFlagEnum;
//import com.haier.hgwms.common.config.lbl.enums.PreFlagEnum;
//import com.haier.hgwms.common.config.lbl.sap.LesOrderEnum;
//import com.haier.hgwms.common.config.lbl.sap.TmsI;
//import com.haier.hgwms.common.config.lbl.util.SymmetricCryptoUtil;
//import com.haier.hgwms.feign.outbound.feign.OutOrderLoadFeign;
//import com.haier.hgwms.feign.outbound.vo.OutOrderLoadVo;
//import com.haier.hgwms.feign.report.dto.outbound.OdsProNxOutEditCarNoDto;
//import com.haier.hgwms.feign.report.dto.preregistration.OdsProOccupyPrintViewDto;
//import com.haier.hgwms.feign.report.dto.raw.SequenceTimeDto;
//import com.haier.hgwms.feign.report.enums.OdsOrderOITypeEnum;
//import com.haier.hgwms.feign.report.vo.preregistration.OdsProOccupyPrintViewVo;
//import com.haier.hgwms.orm.dao.base.BaseFactoryDao;
//import com.haier.hgwms.orm.dao.base.MdProductDao;
//import com.haier.hgwms.orm.dao.business.OdsProAppointmentDao;
//import com.haier.hgwms.orm.dao.business.OdsProOrderOutDao;
//import com.haier.hgwms.orm.dao.business.OdsProPickListDao;
//import com.haier.hgwms.orm.entity.base.BaseFactoryEntity;
//import com.haier.hgwms.orm.entity.base.MdProductEntity;
//import com.haier.hgwms.orm.entity.business.OdsProAppointmentEntity;
//import com.haier.hgwms.orm.entity.business.OdsProOrderOutEntity;
//import com.haier.hgwms.orm.entity.business.OdsProPickListEntity;
//import com.haier.hgwms.report.service.outbound.OdsProNxOutService;
//import com.haier.hgwms.report.service.preregistration.OdsProOccupyPrintService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.servlet.ServletOutputStream;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.math.BigDecimal;
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * 备货单打印
// *
// * @author liubanglong
// * @since 2022-05-05
// */
//@Service
//@Slf4j
//public class OdsProOccupyPrintServiceImpl implements OdsProOccupyPrintService {
//    @Autowired
//    private OdsProNxOutService odsProNxOutService;
//    @Autowired
//    private OdsProAppointmentDao odsProAppointmentDao;
//    @Autowired
//    private OdsProOrderOutDao odsProOrderOutDao;
//    @Autowired
//    private OdsProPickListDao odsProPickListDao;
//    @Autowired
//    private MdProductDao mdProductDao;
//    @Autowired
//    private BaseFactoryDao baseFactoryDao;
//    @Autowired
//    private OutOrderLoadFeign outOrderLoadFeign;
//
//    /**
//     * 获取产品的尺寸
//     *
//     * @param productCodes 产品编号李彪
//     * @return 尺寸信息（productCode,(size,quantity))
//     */
//    private Map<String, Dict> getProductSize(List<String> productCodes) {
//        if (CollUtil.isEmpty(productCodes)) {
//            return Collections.emptyMap();
//        }
//        DsHolder.changeBaseSchema();
//        Map<String, Dict> result = mdProductDao.list(new LambdaQueryWrapper<MdProductEntity>().in(MdProductEntity::getProductCode, productCodes)
//                        .isNotNull(MdProductEntity::getLength)
//                        .isNotNull(MdProductEntity::getWidth)
//                        .isNotNull(MdProductEntity::getHeight))
//                .stream()
//                .collect(Collectors.toMap(MdProductEntity::getProductCode, i -> Dict.create()
//                        //长*宽*高
//                        .set("size", NumberUtil.round(i.getLength(), 0) + "*" + NumberUtil.round(i.getWidth(), 0) + "*" + NumberUtil.round(i.getHeight(), 0))
//                        //方量(米),保留2位小数
//                        .set("quantity", NumberUtil.round(NumberUtil.div(NumberUtil.mul(i.getLength(), i.getWidth(), i.getHeight()), 1000000000), 2)), (k1, k2) -> k1));
//        DsHolder.recoverLastSchema();
//        return result;
//    }
//
//    /**
//     * 获取运单信息
//     *
//     * @param dto 传输条件
//     * @return 运单列表
//     */
//    private List<OdsProOrderOutEntity> getOrders(OdsProOccupyPrintViewDto dto) {
//        String mergeNo = dto.getTrainNumber();
//        String orderNo = dto.getDocumentNo();
//        if (StrUtil.isAllBlank(mergeNo, orderNo)) {
//            throw ApiException.get("车次号和运单号，不能全部为空");
//        }
//        List<String> orderNos = StrUtil.split(orderNo, " ", true, true);
//        // 查询出库单
//        List<OdsProOrderOutEntity> orders = odsProOrderOutDao.list(new QueryWrapper<OdsProOrderOutEntity>().eq(StrUtil.isNotBlank(mergeNo), "order_4", mergeNo)
//                .in(CollUtil.isNotEmpty(orderNos), "order_3", orderNos));
//        if (CollUtil.isEmpty(orders)) {
//            throw ApiException.get("没有找到单据信息");
//        }
//        return orders;
//    }
//
//    /**
//     * 获取预约信息
//     *
//     * @param dto 传输条件
//     * @return 运单列表
//     */
//    private List<OdsProAppointmentEntity> getAppointments(OdsProOccupyPrintViewDto dto) {
//        String mergeNo = dto.getTrainNumber();
//        String orderNo = dto.getDocumentNo();
//        if (StrUtil.isAllBlank(mergeNo, orderNo)) {
//            throw ApiException.get("车次号和运单号，不能全部为空");
//        }
//        List<String> orderNos = StrUtil.split(orderNo, " ", true, true);
//        // 查询预约表
//        List<OdsProAppointmentEntity> appointments = odsProAppointmentDao.list(new QueryWrapper<OdsProAppointmentEntity>().eq(StrUtil.isNotBlank(mergeNo), "merge_no", mergeNo)
//                .in(CollUtil.isNotEmpty(orderNos), "order_no", orderNos));
//        if (CollUtil.isEmpty(appointments)) {
//            throw ApiException.get("没有找到预约信息");
//        }
//        return appointments;
//    }
//
//    /**
//     * 获取拣货单
//     *
//     * @param orders 出库单行
//     * @return 拣货单列表
//     */
//    private List<OdsProPickListEntity> getPicks(List<OdsProOrderOutEntity> orders) {
//        // 查询拣货单
//        List<OdsProPickListEntity> picks = odsProPickListDao.list(new QueryWrapper<OdsProPickListEntity>().gt("qty", 0)
//                .in("order_no", orders.stream().map(OdsProOrderOutEntity::getOrderNo).collect(Collectors.toSet())));
//        //如果没有分配，虚拟分配
//        orders.stream()
//                .filter(i -> !KcfpFlagEnum.isOccupy(i.getKcfpFlag()))
//                .map(order -> OdsProPickListEntity.builder()
//                        .add8(order.getOrder3())
//                        .add9(order.getOrder4())
//                        .orderNo(order.getOrderNo())
//                        .regionCode(order.getRegionCode())
//                        .productCode(order.getProductCode())
//                        .qty(order.getQty())
//                        .productDesc(order.getProductDescZh())
//                        .fpQty(order.getQty())
//                        .build())
//                .forEach(picks::add);
//        //大库位和未分配，统一库位编号
//        picks.forEach(i -> {
//            if (StrUtil.isEmpty(i.getLocCode())) {
//                // 未分配库位名称，统一为”未分配“
//                i.setLocCode("未分配");
//            }
//        });
//        return picks;
//    }
//
//    /**
//     * 打印列表数据-合并单元格
//     *
//     * @param hasOrder     是否按照运单分组
//     * @param productInfos 打印列表数据
//     */
//    private void mergeCell(boolean hasOrder, List<OdsProOccupyPrintViewVo.ProductInfo> productInfos) {
//        // 相同出库单，相同货主，列信息合并
//        Map<String, List<OdsProOccupyPrintViewVo.ProductInfo>> proOwnerMap = productInfos.stream()
//                .collect(Collectors.groupingBy(i -> (hasOrder ? i.getOrderNo() : "") + i.getProOwnerCode()));
//        for (Map.Entry<String, List<OdsProOccupyPrintViewVo.ProductInfo>> entry : proOwnerMap.entrySet()) {
//            List<OdsProOccupyPrintViewVo.ProductInfo> items = entry.getValue();
//            int size = items.size();
//            for (int i = 0; i < size; i++) {
//                items.get(i).setOwnerRowSpan(i == 0 ? size : 0);
//            }
//        }
//        // 相同出库单，相同货主，相同物料，列信息合并
//        Map<String, List<OdsProOccupyPrintViewVo.ProductInfo>> productMap = productInfos.stream()
//                .collect(Collectors.groupingBy(i -> (hasOrder ? i.getOrderNo() : "") + i.getProOwnerCode() + i.getProductCode()));
//        for (Map.Entry<String, List<OdsProOccupyPrintViewVo.ProductInfo>> entry : productMap.entrySet()) {
//            List<OdsProOccupyPrintViewVo.ProductInfo> items = entry.getValue();
//            int size = items.size();
//            int sumQty = items.stream().mapToInt(OdsProOccupyPrintViewVo.ProductInfo::getQty).sum();
//            BigDecimal sumQuantity = items.stream()
//                    .map(OdsProOccupyPrintViewVo.ProductInfo::getQuantity)
//                    .reduce(BigDecimal.ZERO, BigDecimal::add);
//            for (int i = 0; i < size; i++) {
//                items.get(i).setWlQty(sumQty);
//                items.get(i).setWlQuantity(sumQuantity);
//                items.get(i).setWlRowSpan(i == 0 ? size : 0);
//            }
//        }
//        // 相同出库单，单号列信息合并
//        if (hasOrder) {
//            Map<String, List<OdsProOccupyPrintViewVo.ProductInfo>> productOrderMap = productInfos.stream()
//                    .collect(Collectors.groupingBy(OdsProOccupyPrintViewVo.ProductInfo::getOrderNo));
//            for (Map.Entry<String, List<OdsProOccupyPrintViewVo.ProductInfo>> entry : productOrderMap.entrySet()) {
//                List<OdsProOccupyPrintViewVo.ProductInfo> items = entry.getValue();
//                int size = items.size();
//                for (int i = 0; i < size; i++) {
//                    items.get(i).setOrderRowSpan(i == 0 ? size : 0);
//                }
//            }
//        }
//    }
//
//    /**
//     * 获取备货单打印列表数据
//     *
//     * @param hasOrder 是否按照运单分组
//     * @param orders   出库单列表
//     * @return 打印列表数据
//     */
//    private List<OdsProOccupyPrintViewVo.ProductInfo> getProductInfos(boolean hasOrder, List<OdsProOrderOutEntity> orders) {
//        //获取产品尺寸
//        Map<String, Dict> productSize = getProductSize(orders.stream()
//                .map(OdsProOrderOutEntity::getProductCode)
//                .distinct()
//                .collect(Collectors.toList()));
//        DsHolder.changeBaseSchema();
//        Map<String, BaseFactoryEntity> baseFactoryMap = baseFactoryDao.getBaseFactoryMapCode();
//        DsHolder.recoverLastSchema();
//        //拣货单分组汇总并排序
//        return getPicks(orders).stream()
//                .collect(Collectors.toMap(i -> (hasOrder ? i.getAdd8() : "") + i.getRegionCode() + i.getProductCode() + i.getLocCode(), i -> {
//                    OdsProOccupyPrintViewVo.ProductInfo tmp = OdsProOccupyPrintViewVo.ProductInfo.builder()
//                            .orderNo(i.getAdd8())
//                            .mergeNo(StrUtil.isNotBlank(i.getAdd9()) ? i.getAdd9() : "")
//                            .proOwnerCode(i.getRegionCode())
//                            .proOwnerName(Optional.ofNullable(baseFactoryMap.get(i.getRegionCode()))
//                                    .orElse(new BaseFactoryEntity())
//                                    .getFactoryName())
//                            .locCode(i.getLocCode())
//                            .productCode(i.getProductCode())
//                            .productDesc(i.getProductDesc())
//                            .qty(i.getQty())
//                            .locFpQty(i.getFpQty())
//                            .preFlag(orders.stream()
//                                    .filter(order -> StrUtil.equals(i.getOrderNo(), order.getOrderNo()))
//                                    .map(order -> PreFlagEnum.codeToName(order.getPreFlag()))
//                                    .findFirst()
//                                    .orElse(PreFlagEnum.NO.getCode()))
//                            .djStatus(orders.stream()
//                                    .filter(order -> StrUtil.equals(i.getOrderNo(), order.getOrderNo()))
//                                    .map(order -> DjGzStatusEnum.codeToName(order.getDjStatus()))
//                                    .findFirst()
//                                    .orElse("记账状态"))
//                            .cpRef7(orders.stream()
//                                    .filter(order -> StrUtil.equals(i.getOrderNo(), order.getOrderNo()))
//                                    .map(order -> StrUtil.replace(StrUtil.subBefore(Optional.ofNullable(order.getCpRef7()).orElse(""), "/", false), "配送中心", ""))
//                                    .findFirst()
//                                    .orElse("配送中心"))
//                            .build();
//                    //尺寸、方量
//                    if (productSize.containsKey(i.getProductCode())) {
//                        Dict info = productSize.get(i.getProductCode());
//                        tmp.setSize(info.getStr("size"));
//                        tmp.setQuantity(NumberUtil.mul(info.getBigDecimal("quantity"), i.getQty()));
//                    }
//                    return tmp;
//                }, (k1, k2) -> {
//                    k1.setQty(k1.getQty() + k2.getQty());
//                    k1.setLocFpQty(k1.getLocFpQty() + k2.getLocFpQty());
//                    k1.setQuantity(NumberUtil.add(k1.getQuantity(), k2.getQuantity()));
//                    return k1;
//                }))
//                .values()
//                .stream()
//                .sorted(hasOrder ?
//                        Comparator.comparing(OdsProOccupyPrintViewVo.ProductInfo::getOrderNo)
//                                .thenComparing(OdsProOccupyPrintViewVo.ProductInfo::getProOwnerCode)
//                                .thenComparing(OdsProOccupyPrintViewVo.ProductInfo::getProductCode)
//                                .thenComparing(OdsProOccupyPrintViewVo.ProductInfo::getLocCode) :
//                        Comparator.comparing(OdsProOccupyPrintViewVo.ProductInfo::getProOwnerCode)
//                                .thenComparing(OdsProOccupyPrintViewVo.ProductInfo::getProductCode)
//                                .thenComparing(OdsProOccupyPrintViewVo.ProductInfo::getLocCode)
//                )
//                .collect(Collectors.toList());
//    }
//
//    /**
//     * 拉取车次单信息并持久化
//     *
//     * @param trainNumber 车次号
//     */
//    private void saveOrderInfo(String trainNumber) {
//        if (StrUtil.isBlank(trainNumber)) {
//            return;
//        }
//        Dict orderInfo = null;
//        try {
//            orderInfo = TmsI.getOrders(null, trainNumber, null);
//        } catch (Exception e) {
//            log.warn("拉取单据信息异常:{}", e.getMessage());
//            return;
//        }
//        //车牌号
//        String carNo = orderInfo.getStr("licensePlateNumber");
//        if (StrUtil.isNotBlank(carNo)) {
//            odsProNxOutService.editCarNo(OdsProNxOutEditCarNoDto.builder().order4(trainNumber).chCd(carNo).build());
//        }
//        //司机电话
//        String driverPhone = orderInfo.getStr("driverPhone");
//        if (StrUtil.isNotBlank(driverPhone)) {
//            odsProAppointmentDao.update(new LambdaUpdateWrapper<OdsProAppointmentEntity>().eq(OdsProAppointmentEntity::getMergeNo, trainNumber)
//                    .set(OdsProAppointmentEntity::getDriverPhone, SymmetricCryptoUtil.desEncrypt(driverPhone))
//                    .set(OdsProAppointmentEntity::getUpdatedBy, DsHolder.getLoginName())
//                    .set(OdsProAppointmentEntity::getUpdatedAt, new Date()));
//        }
//    }
//
//    /**
//     * 查询分配信息
//     *
//     * @param dto 传输条件
//     * @return 响应信息
//     */
//    @Override
//    public OdsProOccupyPrintViewVo view(OdsProOccupyPrintViewDto dto) {
//        //是否按照运单分组
//        final boolean hasOrder = dto.getHasOrder();
//        //拉取车次单信息并持久化
//        saveOrderInfo(dto.getTrainNumber());
//        //查询运单信息
//        List<OdsProOrderOutEntity> orders = getOrders(dto);
//        //获取备货单打印列表数据
//        List<OdsProOccupyPrintViewVo.ProductInfo> productInfos = getProductInfos(hasOrder, orders);
//        //打印列表合并单元格
//        mergeCell(dto.getHasOrder(), productInfos);
//        //最后添加一行统计结果
//        productInfos.add(OdsProOccupyPrintViewVo.ProductInfo.builder()
//                .proOwnerName(hasOrder ? "" : "合计")
//                .orderNo(hasOrder ? "合计" : "")
//                .productDesc("")
//                .mergeNo("")
//                .wlQuantity(NumberUtil.add(productInfos.stream()
//                        .map(OdsProOccupyPrintViewVo.ProductInfo::getQuantity)
//                        .toArray(BigDecimal[]::new)))
//                .wlQty(orders.stream().mapToInt(OdsProOrderOutEntity::getQty).sum())
//                .size("")
//                .locCode("")
//                .locFpQty(null)
//                .build());
//        // 组织返回信息
//        OdsProOccupyPrintViewVo vo = new OdsProOccupyPrintViewVo();
//        vo.setTrainNumbers(orders.stream()
//                .map(OdsProOrderOutEntity::getOrder4)
//                .filter(StrUtil::isNotBlank)
//                .collect(Collectors.toSet()));
//        vo.setChCds(orders.stream()
//                .map(OdsProOrderOutEntity::getChCd)
//                .filter(StrUtil::isNotBlank)
//                .collect(Collectors.toSet()));
//        vo.setOrderNos(orders.stream().map(OdsProOrderOutEntity::getOrder3).collect(Collectors.toSet()));
//        vo.setIndustryTradeNames(orders.stream().map(OdsProOrderOutEntity::getCpRef7).collect(Collectors.toSet()));
//        vo.setProductInfos(productInfos);
//        List<String> orderSourceSys = orders.stream()
//                .map(OdsProOrderOutEntity::getOrderSourceSys)
//                .distinct()
//                .collect(Collectors.toList());
//        if (orderSourceSys.contains(OdsOrderOITypeEnum.NX.getCode())) {
//            vo.setDriverPhones(getAppointments(dto).stream()
//                    .map(OdsProAppointmentEntity::getDriverPhone)
//                    .filter(StrUtil::isNotBlank)
//                    .distinct()
//                    .map(SymmetricCryptoUtil::desDecrypt)
//                    .collect(Collectors.toSet()));
//        }
//        return vo;
//    }
//
//    /**
//     * 复制自时序导出
//     * @param result
//     * @param time
//     * @param scheduleDate
//     * @param fileName
//     */
//    private void down(String result, String time, String scheduleDate, String fileName) {
//        HttpServletResponse response = ProjectUtil.obtainHttpServletResponse();
//        response.setContentType("application/force-download");// 设置强制下载不打开
//        response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode(fileName));
//        ServletOutputStream outputStream;
//        try {
//            outputStream = response.getOutputStream();
//        } catch (IOException e) {
//            log.error(e.getMessage(), e);
//            throw ApiException.get(e);
//        }
//        ExcelWriter writer = EasyExcelFactory.write(outputStream).build();
//        try {
//            // 动态添加表头，适用一些表头动态变化的场景
//            WriteSheet sheet1 = new WriteSheet();
//            // todo
//            sheet1.setSheetName("sheet名称自己改");
//            sheet1.setSheetNo(0);
//            // 创建一个表格，用于 Sheet 中使用
//            WriteTable table = new WriteTable();
//            table.setTableNo(1);
//            // 配置表头
//            table.setHead(this.head());
//            // 获取excel导出使用的原始数据 OdsProOccupyPrintViewVo
//            // todo dto入参同view接口
//            OdsProOccupyPrintViewDto dto = new OdsProOccupyPrintViewDto();
//            // 设置该字段，如果是导出，则view方法不保存数据
//            dto.setIsExcel("");
//            OdsProOccupyPrintViewVo view = this.view(dto);
//            // 获取excel导出使用的数据
//            List<List<String>> data = this.contentData(view);
//            // 写入excel
//            writer.write(data, sheet1, table);
//
//            this.mergeExcelCell(dto.getHasOrder(), view, writer);
//
//        } finally {
//            writer.finish();
//            IoUtil.close(outputStream);
//        }
//    }
//
//    private void mergeExcelCell(Boolean hasOrder, OdsProOccupyPrintViewVo view, ExcelWriter writer) {
//        if (!hasOrder) {
//            // todo false的逻辑待定
//            return;
//        }
//        // 单元格合并
////        writer.merge() 方法，行号列号从0开始，本次excel排除表头1行
//        String theFormerOrderNo = null;
////        String theLatterOrderNo = null;
//        List<OdsProOccupyPrintViewVo.ProductInfo> productInfos = view.getProductInfos();
//        for (int i = 0; i < productInfos.size(); i++) {
//            OdsProOccupyPrintViewVo.ProductInfo productInfo = productInfos.get(i);
//            String orderNo = productInfo.getOrderNo();
//            Integer orderRowSpan = productInfo.getOrderRowSpan();
//            if (orderRowSpan == null || orderRowSpan == 1) {
//                // 只有一行，不需要合并
//                continue;
//            }
//            if (Objects.equals(theFormerOrderNo, orderNo)) {
//                // 本行orderNo与上一行orderNo相同，不需要合并
//                continue;
//            }
//            // 5是因为从页面来看需要合并的是前5列数据
//            for (int i1 = 0; i1 < 5; i1++) {
//                // 从当前行（1 + i）向下数（orderRowSpan - 1）行需要合并
//                writer.merge(1 + i, 1 + i + orderRowSpan - 1, i1, i1);
//            }
//        }
//    }
//
//    private List<List<String>> contentData(OdsProOccupyPrintViewVo view) {
//        List<List<String>> excelDataList = new ArrayList<>();
//        for (int i = 0; i < view.getProductInfos().size(); i++) {
//            List<String> oneLineDataList = new ArrayList<>();
//            OdsProOccupyPrintViewVo.ProductInfo productInfo = view.getProductInfos().get(i);
//            // 单号
//            oneLineDataList.add(productInfo.getOrderNo());
//            // 车次号
//            oneLineDataList.add(productInfo.getMergeNo());
//            // todo 是否备货
//            oneLineDataList.add(productInfo.getPreFlag());
//            // 单据状态
//            oneLineDataList.add(productInfo.getDjStatus());
//            // todo 配送中心
//            oneLineDataList.add(productInfo.getCpRef7());
//            // 物料号
//            oneLineDataList.add(productInfo.getProductCode());
//            // 物料描述
//            oneLineDataList.add(productInfo.getProductDesc());
//            // todo 需求数
//            oneLineDataList.add(productInfo.getProductDesc());
//            // "库位", "分配数", "方量m3", "长宽高(mm)"
//            // todo 其它字段继续添加到 oneLineDataList
//        }
//        return excelDataList;
//    }
//
//    /**
//     * 内部的list，每一个list是一列表头
//     * @return
//     */
//    private List<List<String>> head() {
//        List<List<String>> list = new ArrayList<>();
//        // todo
//        List<String> titleList = Arrays.asList("单号", "车次号", "是否备货", "单据状态", "配送中心", "物料号", "物料描述", "需求数", "库位", "分配数", "方量m3", "长宽高(mm)");
//        titleList.stream().map(Arrays::asList).forEach(list::add);
//        return list;
//    }
//
//    private List<List<String>> head(String time, String scheduleDate) {
//
//        // 处理时间数据
//        Map<Integer, String> timeMap = new HashMap<>();
//        JSONObject respJson = JSONObject.parseObject(time);
//        JSONArray data = (JSONArray) respJson.get("data");
//        for (int i = 0; i < data.size(); i++) {
//            JSONObject resultJson = (JSONObject) data.get(i);
//            SequenceTimeDto resultBean = JSONObject.toJavaObject(resultJson, SequenceTimeDto.class);
//            timeMap.put(resultBean.getSequence(), resultBean.getSequenceName());
//        }
//
//        List<List<String>> headTitles = new ArrayList<>();
//        List<String> head = Arrays.asList("产品编码", "产品描述", "线体名称", "当日计划", "当日实际", "类别");
//        head.forEach(a -> headTitles.add(CollUtil.newArrayList(a, a)));
//        List<String> timeList = new ArrayList<>();
//        // 按时序顺序拼接24小时
//        for (int i = 1; i <= 24; i++) {
//            timeList.add(timeMap.get(i));
//        }
//        timeList.forEach(a -> headTitles.add(CollUtil.newArrayList(scheduleDate, a)));
//        return headTitles;
//    }
//
//    /**
//     * 重新拉取单据并分配库存
//     *
//     * @param dto 传输条件
//     */
//    @Override
//    public OutOrderLoadVo loadBeforePrint(IdDto dto) {
//        if (!LesOrderEnum.isPcd(dto.getId())) {
//            throw ApiException.get("只支持车次号操作");
//        }
//        return outOrderLoadFeign.loadBeforePrint(dto).getData();
//    }
//}
